package Pojo;

import java.util.List;
import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;


/** Classe Disciplina
 * Classe de Disciplinas que faz relacionamentos com Turma e Aluno. 
 * A relação entre aluno e turma é quebrada em histórico. 
 *
 * @author Thiago Schons
 *
 */
@Entity
public class Disciplina implements Serializable {
	/** Código da Disciplina*/
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
	private Integer id;
	
	/** Nome da Disciplina*/
	private String nome;
	
	/** Ementa da Disciplina*/
	private String ementa;
	
	/** Carga Horária necessária para se cursar a Disciplina*/
	private int cargaHoraria;
	
	/** Lista de Turmas*/
        @OneToMany(mappedBy="disciplina")
	private List<Turma> turmas;
	
	/** Lista de Históricos*/
        @OneToMany(mappedBy="disciplina")
	private List<Historico> historicos;

        /**
         * Construtor exigido pela annotation
         */
        public Disciplina(){
       
        }
        
	/**
	 * Construtor de Disciplinas sem relacionamentos
	 * @param id
	 * @param nome
	 * @param ementa
	 * @param cargaHoraria
	 */
	public Disciplina(int id, String nome, String ementa, int cargaHoraria){
		this.setId(id);
		this.setNome(nome);
		this.setEmenta(ementa);
		this.setCargaHoraria(cargaHoraria);
	}
        
        	/**
	 * Construtor de Disciplinas sem relacionamentos sem id
	 * @param id
	 * @param nome
	 * @param ementa
	 * @param cargaHoraria
	 */
	public Disciplina(String nome, String ementa, int cargaHoraria){
		this.setNome(nome);
		this.setEmenta(ementa);
		this.setCargaHoraria(cargaHoraria);
	}
        
        /**
	 * Construtor de Disciplinas com relacionamentos sem id
	 * @param id
	 * @param nome
	 * @param ementa
	 * @param cargaHoraria
	 */
	public Disciplina(String nome, String ementa, int cargaHoraria, 
                List<Turma> turmas, List<Historico> historicos){
		this.setNome(nome);
		this.setEmenta(ementa);
		this.setCargaHoraria(cargaHoraria);
                this.setTurmas(turmas);
                this.setHistoricos(historicos);
	}

        /**
	 * Sobrescrita do método toString
	 */
	@Override
	public String toString(){
		return(this.getId()+"\t"+this.getNome()+"\t"+this.getEmenta()+"\t"+this.getCargaHoraria()+"\n");
	}
	
	/**
	 * Getter do idDisciplina
	 * @return Código da Disciplina
	 */
	public int getId(){
		return(this.id);
	}
	
	/**
	 * Setter do idDisciplina
	 * @param id
	 */
	private void setId(Integer id){
		this.id = id;
	}
	
	/**
	 * Getter do Nome
	 * @return NomeString da Disciplina
	 */
	public String getNome(){
		return(this.nome);
	}
	
	/**
	 * Setter do Nome
	 * @param nome
	 */
	private void setNome(String nome){
		this.nome = nome;
	}
	
	/**
	 * Getter do método toString
	 * @return Ementa da Disciplina
	 */
	public String getEmenta(){
		return(this.ementa);
	}
	
	/**
	 * Setter da Ementa
	 * @param ementa
	 */
	private void setEmenta(String ementa){
		this.ementa = ementa;
	}
	
	/**
	 * Getter da Carga Horária
	 * @return Carga Horária da Disciplina
	 */
	public int getCargaHoraria(){
		return(this.cargaHoraria);
	}
	
	/**
	 * Setter da Carga Horária
	 * @param cargaHoraria
	 */
	private void setCargaHoraria(int cargaHoraria){
		this.cargaHoraria = cargaHoraria;
	}

	/**
	 * Getter de Turmas
	 * @return Lista de Turmas relacionadas com Disciplina
	 */
	public List<Turma> getTurmas() {
		return turmas;
	}

	/**
	 * Setter de Turmas
	 * @param turmas
	 */
	private void setTurmas(List<Turma> turmas) {
		this.turmas = turmas;
	}

        /**
         * Getter dos Históricos
         * @return List<Historico>
         */
        public List<Historico> getHistoricos() {
            return historicos;
        }
        
        /**
         * Setter de Históricos
         * @param historicos 
         */
        public void setHistoricos(List<Historico> historicos) {
            this.historicos = historicos;
        }
}

